package cn.dinkevin.xui.util;

import android.text.TextUtils;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import cn.dinkevin.xui.R;
import cn.dinkevin.xui.finder.ValueFinder;

/**
 * URL 工具辅助类 </br>
 * Created by ChengPengFei on 2016/12/3 0003.</br>
 * Copyright ©2017 juziwl, All Rights Reserved.
 */

public final class URLUtils {

    private URLUtils(){}

    /**
     * 将参数填充指定网络路径</br>
     * 示例说明：
     *      网络路径:http://juziwl.com/api/v1/users/{userId}/token/{token}
     *      参数集合：{
     *                  "userId":"1234212321",
     *                  "token":"okdjfc-12323-fdijsd-1232"
     *                }
     *      填充之后：http://juziwl.com/api/v1/users/1234212321/token/okdjfc-12323-fdijsd-1232
     * @param url 网络路径
     * @param params 参数
     * @return
     */
    public static String setParams(String url, Map<String,Object> params){
        String result = url;
        // 添加参数
        Iterator<String> it = params.keySet().iterator();
        while (it.hasNext()){
            String key = it.next();
            String value = params.get(key).toString();
            if(!key.startsWith("{"))
                key = "{" + key;

            if(!key.endsWith("}"))
                key += "}";
            result = result.replace(key,value);
        }
        return result;
    }

    /**
     * 将参数填充到指定格式化路径</br>
     * 示例说明：
     *      网络路径:http://juziwl.com/api/v1/users/{userId}/token/{token}
     *      参数集合："1234212321","okdjfc-12323-fdijsd-1232"
     *      填充之后：http://juziwl.com/api/v1/users/1234212321/token/okdjfc-12323-fdijsd-1232
     * @param url 格式化路径
     * @param params 有序参数
     * @return 可访问的路径
     */
    public static String fillParams(String url, Object... params){
        if(params == null || TextUtils.isEmpty(url)) return url;
        List<String> paramsArray = ListUtil.valueOf(params);
        char specialStart = 0x7B;                             // 参数关键字起点:"{"
        char specialEnd = 0x7D;                               // 参数关键字结点："}"
        StringBuffer paramKeyBuffer = new StringBuffer();     // 参数关键字
        StringBuffer urlBuffer = new StringBuffer();
        int startPosition = -1;                               // 关键字起点位置
        for(int i = 0;i < url.length();i++){
            char temp = url.charAt(i);
            if(specialStart == temp){
                startPosition = i;
                continue;
            }

            if(specialEnd == temp && startPosition > -1){
                startPosition = -1;
                paramKeyBuffer.setLength(0);
                urlBuffer.append(paramsArray.size() > 0 ? paramsArray.remove(0) : "");
                continue;
            }

            if(startPosition > -1){
                paramKeyBuffer.append(temp);
                continue;
            }

            urlBuffer.append(temp);
        }
        urlBuffer.append(paramKeyBuffer);
        return urlBuffer.toString();
    }

    /**
     * 对指定网络路径进行编码处理</br>
     * 将网络路径中非 ASCII 的字符，例如：汉字，进行处理编码到 HTTP 可以识别的 ASCII
     * @param url
     * @return
     */
    public static String encodeUrl(String url){
        return StringUtil.encodeHttpUrl(url).trim();
    }

    /**
     * 检查当前路径是否包含广告路径
     * @param checkUrl 待检查的网络路径
     * @return true -> 包含广告网络路径
     */
    public static boolean hasAdvertisementUrl(String checkUrl){
        String[] blockUrl = ValueFinder.getStringArray(R.array.url_intercept);
        for(String url : blockUrl){
            if(checkUrl.contains(url)){
                return true;
            }
        }
        return false;
    }
}
